<!DOCTYPE html>
<html>

<head>
  <title>GoWithFlow chooses Quarkus to deliver fast to production with minimal risk</title>
  <script id="adobe_dtm" src="https://www.redhat.com/dtm.js" type="text/javascript"></script>
  <script src="/assets/javascript/highlight.pack.js" type="text/javascript"></script>
  <META HTTP-EQUIV='Content-Security-Policy' CONTENT="default-src 'none'; script-src 'self' 'unsafe-eval' 'sha256-ANpuoVzuSex6VhqpYgsG25OHWVA1I+F6aGU04LoI+5s=' 'sha256-ipy9P/3rZZW06mTLAR0EnXvxSNcnfSDPLDuh3kzbB1w=' js.bizographics.com https://www.redhat.com assets.adobedtm.com jsonip.com https://ajax.googleapis.com https://www.googletagmanager.com https://www.google-analytics.com https://use.fontawesome.com; style-src 'self' https://fonts.googleapis.com https://use.fontawesome.com; img-src 'self' *; media-src 'self' ; frame-src https://www.googletagmanager.com https://www.youtube.com; frame-ancestors 'none'; base-uri 'none'; object-src 'none'; form-action 'none'; font-src 'self' https://use.fontawesome.com https://fonts.gstatic.com;">
  <META HTTP-EQUIV='X-Frame-Options' CONTENT="DENY">
  <META HTTP-EQUIV='X-XSS-Protection' CONTENT="1; mode=block">
  <META HTTP-EQUIV='X-Content-Type-Options' CONTENT="nosniff">
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="description" content="Quarkus: Supersonic Subatomic Java">
  <meta name="twitter:card" content="summary_large_image">
  <meta name="twitter:site" content="@QuarkusIO"> 
  <meta name="twitter:creator" content="@QuarkusIO">
  <meta property="og:url" content="https://quarkus.io/blog/gowithflow-chooses-quarkus-to-deliver-fast-to-production/" />
  <meta property="og:title" content="GoWithFlow chooses Quarkus to deliver fast to production with minimal risk" />
  <meta property="og:description" content="Quarkus: Supersonic Subatomic Java" />
  <meta property="og:image" content="/assets/images/quarkus_card.png" />
  <link rel="canonical" href="https://quarkus.io/blog/gowithflow-chooses-quarkus-to-deliver-fast-to-production/">
  <link rel="shortcut icon" type="image/png" href="/favicon.ico" >
  <link rel="stylesheet" href="https://quarkus.io/guides/stylesheet/config.css" />
  <link rel="stylesheet" href="/assets/css/main.css" />
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
  <link rel="alternate" type="application/rss+xml"  href="https://quarkus.io/feed.xml" title="Quarkus">
  <script src="https://quarkus.io/assets/javascript/goan.js" type="text/javascript"></script>
  <script src="https://quarkus.io/assets/javascript/hl.js" type="text/javascript"></script>
</head>

<body class="post">
  <!-- Google Tag Manager (noscript) -->
  <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NJWS5L"
  height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  <!-- End Google Tag Manager (noscript) -->

  <div class="nav-wrapper">
  <div class="grid-wrapper">
    <div class="width-12-12">
      <input type="checkbox" id="checkbox" />
      <nav id="main-nav" class="main-nav">
  <div class="container">
    <div class="logo-wrapper">
      
        <a href="/"><img src="/assets/images/quarkus_logo_horizontal_rgb_600px_reverse.png" class="project-logo" title="Quarkus"></a>
      
    </div>
    <label class="nav-toggle" for="checkbox">
      <i class="fa fa-bars"></i>
    </label>
    <div id="menu" class="menu">
      <span>
        <a href="/get-started/" class="">Get Started</a>
      </span>
      <span>
        <a href="/guides/" class="">Guides</a>
      </span>
      <span>
        <a href="/community/" class="">Community</a>
      </span>
      <span>
        <a href="/support/" class="">Support</a>
      </span>
      <span>
        <a href="/blog/" class="active">Blog</a>
      </span>
      <span>
        <a href="https://code.quarkus.io" class="button-cta secondary white">Start Coding</a>
      </span>
    </div>
  </div>
      </nav>
    </div>
  </div>
</div>

  <div class="content">
    <div class="post-page grid-wrapper">
  <div class="width-8-12 width-12-12-m doc-content">
    <div class="grid-wrapper">
      <div class="width-12-12">
        <p>
          <a href="/blog"><i class="fas fa-angle-left"></i> Back to all posts</a>
        </p>
      </div>
      <div class="width-12-12">
        <div class="post-date">
          November 06, 2019 
          
            <span class="tags"><a href="/blog/tag/user-story">#user-story</a></span>
          
        </div>
        <h1 class="post-title">GoWithFlow chooses Quarkus to deliver fast to production with minimal risk</h1>
        <div class="grid-wrapper">
          <div class="width-8-12 width-12-12-m byline-wrapper">
            
            
              <img class="headshot" src="https://www.gravatar.com/avatar/33c2cb775850e595c2dc1dedd88ef98d">
            
            <p class="byline">By Cesar Saavedra</p>
          </div>
          <div class="width-12-12">
              <div id="preamble">
<div class="sectionbody">
<div class="imageblock customer-logo">
<div class="content">
<img src="/assets/images/posts/quarkus-user-stories/gowithflow/Flow_id.png" alt="GoWithFlow logo" width="300">
</div>
</div>
<div class="paragraph">
<p>GoWithFlow, a recent startup based out of Portugal, a spin-off from <a href="https://www.ceiia.com/">CEiiA</a> with <a href="https://www.galp.com/corp/en/">Galp</a> as a majority shareholder, provides integrated mobility solutions that can both provision end-to-end services to new mobility operators (eg. running a scooter-sharing network, managing an EV charging network, managing a fleet), but also gather data from other mobility operators, e.g.car-sharing operators, public transportation, etc, and thus provide a single access to mobility within a city. They consolidate all this data for consumption by citizens via their mobile phone apps that can help them locate the closest shared vehicle, or the most optimal way to get from point A to point B using multiple transportation options, for example.</p>
</div>
<div class="paragraph">
<p>They had a monolithic application server to support all their apps and their developers were experiencing 2 to 3-minutes deploy cycles to test any change made to the code. In addition, it was taking them 2 to 3 months to go to production every time there was a change, no matter how small it was, which required them to deploy the entire system - even parts that had not been modified at all - making the whole process highly risky.</p>
</div>
<div class="paragraph">
<p>GoWithFlow is in the process of moving their workloads to containers on the cloud so cloud resource consumption costs are always top-of-mind and they are always trying to find better ways to optimize memory and compute usage on the cloud.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="lower-cloud-resource-consumption"><a class="anchor" href="#lower-cloud-resource-consumption"></a>Lower cloud resource consumption</h2>
<div class="sectionbody">
<div class="paragraph">
<p>When Raul Valdoleiros, Architect and DevOps Leader at GoWithFlow, first heard of Quarkus, he was extremely interested in its capabilities and features. They looked at other similar solutions in the market but after evaluating Quarkus, they decided to move forward with it. In comparing it with their existing monolithic solution, they realized the enormous memory savings introduced by Quarkus, 79% reduction in memory consumption under load, to be exact. The following table shows the results of their evaluation:</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<caption class="title">Table 1. Evaluation results</caption>
<colgroup>
<col style="width: 33.3333%;">
<col style="width: 33.3333%;">
<col style="width: 33.3334%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Runtime mode</th>
<th class="tableblock halign-left valign-top">RAM at startup</th>
<th class="tableblock halign-left valign-top">RAM with load</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Monolith</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.3 GB</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.5 GB</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Quarkus JVM-mode</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">90 MB</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">800 MB</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Quarkus native-mode</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">11 MB</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">320 MB</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="rich-functionality-with-small-learning-curve"><a class="anchor" href="#rich-functionality-with-small-learning-curve"></a>Rich functionality with small learning curve</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Besides its low memory consumption and lightning fast startup time, GoWithFlow selected Quarkus because of the rich set of frameworks, extensions, and rich functionality included with it. Raul describes Quarkus as <em>"an incredible integration project that includes functionality, like MicroProfile, Vert.x, Kafka, and Keycloak, and many others."</em></p>
</div>
<div class="paragraph">
<p>Because Quarkus extensions are composed of frameworks and functionality that GoWithFlow developers already knew, it was very easy for them to learn and quickly become productive. Although Quarkus introduces innovative technology for running Java on the cloud and containers, developers found it familiar and were able to pick it up with a small learning curve because all its extensions were familiar to them. Nevertheless, they did spend some time familiarizing themselves with aspects related to native images and features for which Quarkus did not yet have extensions.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="the-prototype"><a class="anchor" href="#the-prototype"></a>The prototype</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Once GoWithFlow selected Quarkus for Java development, they started a prototype project, which consisted of the implementation of 4 microservices. Using the Quarkus built-in testing harness, developers implemented automated tests, which are run during build time in both JVM and native modes. They also optimized the pipeline processes to avoid any human intervention during the deployment to production, where the microservices run in native mode. Integration testing consists of launching the application and testing the entire system through the web interface, which invokes the Quarkus microservices. All this work was accomplished by 3 developers from their Architecture team and GoWithFlow is very happy with what they have accomplished so far.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="developer-productivity"><a class="anchor" href="#developer-productivity"></a>Developer Productivity</h2>
<div class="sectionbody">
<div class="paragraph">
<p>GoWithFlow had been running their application in a monolithic application server. This meant that they had to roll out the entire application to production even if a small change had been applied to it. Besides being time consuming with releases taking 2 to 3 months, they felt that this was risky because they had to constantly release code that hadn’t been modified. In addition, developers had to wait 2 to 3 minutes to see their changes while they waited for the deployment of their changes to the application server. These lengthened the development process, which negatively impacted developer productivity and their ability to innovate and stay ahead of the competition. They worked on speeding up their development process and a key element that helped them accomplish this was the container-first approach of Quarkus. Now, they no longer have to wait months for production releases. In addition, developers can now use Quarkus live coding capabilities to test their source code changes immediately, which saves a lot of development and troubleshooting time, as described by Raul <em>“live coding is one of Quarkus best features if not the best one.”</em></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="future-plans"><a class="anchor" href="#future-plans"></a>Future plans</h2>
<div class="sectionbody">
<div class="paragraph">
<p>GoWithFlow currently delivers every week to production and are working on optimizing their development process with the goal of achieving continuous deployment in the future. As part of this work, they also plan to continue to break their monolith into Quarkus-based microservices by having the entire development team dedicated to this effort, a total of 10 developers. This team will also continue to develop new functionality in Quarkus.</p>
</div>
<div class="paragraph">
<p><em>"Quarkus including MicroProfile was very important to us"</em> Raul mentions when referring to their use of MicroProfile Health, MicroProfile Config, MicroProfile Fault Tolerance and MicroProfile Rest Client extensions. In the future, they plan to use MicroProfile OpenTracing to visualize requests that traverse different microservices and this is a key functionality to them.</p>
</div>
<div class="paragraph">
<p>GoWithFlow is happy with what they have accomplished so far with Quarkus running in production in native mode and continue to collaborate with the community to foster its innovation.</p>
</div>
<div class="paragraph">
<p>For more information on Quarkus:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Quarkus website: <a href="http://quarkus.io" class="bare">http://quarkus.io</a></p>
</li>
<li>
<p>Quarkus GitHub project: <a href="https://github.com/quarkusio/quarkus" class="bare">https://github.com/quarkusio/quarkus</a></p>
</li>
<li>
<p>Quarkus Twitter: <a href="https://twitter.com/QuarkusIO" class="bare">https://twitter.com/QuarkusIO</a></p>
</li>
<li>
<p>Quarkus chat: <a href="https://quarkusio.zulipchat.com/" class="bare">https://quarkusio.zulipchat.com/</a></p>
</li>
<li>
<p>Quarkus mailing list: <a href="https://groups.google.com/forum/#!forum/quarkus-dev" class="bare">https://groups.google.com/forum/#!forum/quarkus-dev</a></p>
</li>
<li>
<p><a href="https://www.redhat.com/cms/managed-files/cl-4-reasons-try-quarkus-checklist-f19180cs-201909-en.pdf">Four reasons to use Quarkus</a></p>
</li>
</ul>
</div>
</div>
</div>
              
          </div>
          <div class="width-12-12"><div class="share-page">
  <a class="share-linkedin" href="https://www.linkedin.com/shareArticle?mini=true&url=https://quarkus.io/blog/gowithflow-chooses-quarkus-to-deliver-fast-to-production/&title=GoWithFlow chooses Quarkus to deliver fast to production with minimal risk" rel="nofollow" target="_blank" title="Share on LinkedIn">
    <img src="/assets/images/share-page/icons_social-linkedin.png"/>
  </a>
  <a class="share-twitter" href="https://twitter.com/intent/tweet?text=GoWithFlow chooses Quarkus to deliver fast to production with minimal risk&url=https://quarkus.io/blog/gowithflow-chooses-quarkus-to-deliver-fast-to-production/&via=quarkusio&related=quarkusio" rel="nofollow" target="_blank" title="Share on Twitter">
    <img src="/assets/images/share-page/icons_social-twitter.png"/>
  </a>
  <a class="share-facebook" href="https://facebook.com/sharer.php?u=https://quarkus.io/blog/gowithflow-chooses-quarkus-to-deliver-fast-to-production/" rel="nofollow" target="_blank" title="Share on Facebook">
    <img src="/assets/images/share-page/icons_social-facebook.png"/>
  </a>
  <a class="share-reddit" href="http://www.reddit.com/submit?url=https://quarkus.io/blog/gowithflow-chooses-quarkus-to-deliver-fast-to-production/" onclick="window.open(this.href, 'pop-up', 'left=20,top=20,width=900,height=500,toolbar=1,resizable=0'); return false;" title="Share on Reddit" >
    <img src="/assets/images/share-page/icons_social-reddit.png"/>
  </a>
  <a class="share-email" href="mailto:?subject=GoWithFlow chooses Quarkus to deliver fast to production with minimal risk&amp;body=GoWithFlow chooses Quarkus to deliver fast to production with minimal risk https://quarkus.io/blog/gowithflow-chooses-quarkus-to-deliver-fast-to-production/" title="Share via Email" >
    <img src="/assets/images/share-page/icons_social-email.png"/>
  </a>
</div>
</div>
        </div>
      </div>
    </div>
  </div>
</div>

  </div>

  <div class="content project-footer">
  <div class="footer-section">
    <div class="logo-wrapper">
      <a href="/"><img src="/assets/images/quarkus_logo_horizontal_rgb_reverse.svg" class="project-logo" title="Quarkus"></a>
    </div>
  </div>
  <div class="grid-wrapper">
    <p class="grid__item width-3-12">Quarkus is open. All dependencies of this project are available under the <a href='https://www.apache.org/licenses/LICENSE-2.0' target='_blank'>Apache Software License 2.0</a> or compatible license.<br /><br />This website was built with <a href='https://jekyllrb.com/' target='_blank'>Jekyll</a>, is hosted on <a href='https://pages.github.com/' target='_blank'>Github Pages</a> and is completely open source. If you want to make it better, <a href='https://github.com/quarkusio/quarkusio.github.io' target='_blank'>fork the website</a> and show us what you’ve got.</p>

    
      <div class="width-1-12 project-links">
        <span>Navigation</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="/">Home</a></li>
          
            <li><a href="/guides">Guides</a></li>
          
            <li><a href="/community/#contributing">Contribute</a></li>
          
            <li><a href="/faq">FAQ</a></li>
          
            <li><a href="/get-started">Get Started</a></li>
          
        </ul>
      </div>
    
      <div class="width-1-12 project-links">
        <span>Contribute</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="https://twitter.com/quarkusio">Follow us</a></li>
          
            <li><a href="https://github.com/quarkusio">GitHub</a></li>
          
            <li><a href="/security">Security&nbsp;policy</a></li>
          
        </ul>
      </div>
    
      <div class="width-1-12 project-links">
        <span>Get Help</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="https://groups.google.com/forum/#!forum/quarkus-dev">Forums</a></li>
          
            <li><a href="https://quarkusio.zulipchat.com">Chatroom</a></li>
          
        </ul>
      </div>
    

    
      <div class="width-3-12 more-links">
        <span>Quarkus is made of community projects</span>
        <ul class="footer-links">
          
            <li><a href="https://vertx.io/" target="_blank">Eclipse Vert.x</a></li>
          
            <li><a href="https://microprofile.io" target="_blank">Eclipse MicroProfile</a></li>
          
            <li><a href="https://hibernate.org" target="_blank">Hibernate</a></li>
          
            <li><a href="https://netty.io" target="_blank">Netty</a></li>
          
            <li><a href="https://resteasy.github.io" target="_blank">RESTEasy</a></li>
          
            <li><a href="https://camel.apache.org" target="_blank">Apache Camel</a></li>
          
            <li><a href="https://code.quarkus.io/" target="_blank">And many more...</a></li>
          
        </ul>
      </div>
    
  </div>
</div>
  <div class="content redhat-footer">
  <div class="grid-wrapper">
    <span class="licence">
      <i class="fab fa-creative-commons"></i><i class="fab fa-creative-commons-by"></i> <a href="https://creativecommons.org/licenses/by/3.0/" target="_blank">CC by 3.0</a> | <a href="https://www.redhat.com/en/about/privacy-policy">Privacy Policy</a>
    </span>
    <span class="redhat">
      Sponsored by
    </span>
    <span class="redhat-logo">
      <a href="https://www.redhat.com/" target="_blank"><img src="/assets/images/redhat_reversed.svg"></a>
    </span>
  </div>
</div>


  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js" integrity="sha384-8gBf6Y4YYq7Jx97PIqmTwLPin4hxIzQw5aDmUg/DDhul9fFpbbLcLh3nTIIDJKhx" crossorigin="anonymous"></script>
  <script type="text/javascript" src="/assets/javascript/mobile-nav.js"></script>
  <script type="text/javascript" src="/assets/javascript/scroll-down.js"></script>
  <script src="/assets/javascript/satellite.js" type="text/javascript"></script>
  <script src="https://quarkus.io/guides/javascript/config.js" type="text/javascript"></script>
  <script src="/assets/javascript/search-filter.js" type="text/javascript"></script>
  <script src="/assets/javascript/back-to-top.js" type="text/javascript"></script>
</body>

</html>
